什么是作用域和作用域链?

标签:2024-05-19 17:45:12

作用域是指变量和函数在代码中的可访问范围

作用域链是指在代码中查找变量和函数的过程,当一个变量或函数在当前作用域中找不到时,它会向上层作用域继续查找,直到找到为止,这种层层嵌套的查找关系形成了作用域链。

一、作用域分有全局作用域局部作用域块级作用域

全局作用域

作用于当前所有代码执行的环境(script标签内部)或者一个独立的js文件。

在全局作用域下声明的变量叫做全局变量(在函数外部定义的变量)。任何不在函数中或是大括号中声明的变量,都是在全局作用域下,全局作用域下声明的变量可以在程序的任意位置访问

1、全局变量在代码的任何位置都可以使用。

2、在全局作用域下var声明的变量是全局变量。

3、特殊情况下,在函数内不使用var声明的变量也是全局变量(不建议使用)。

局部作用域

作用于函数内的代码环境,就是局部作用域。因为跟函数有关系,所以也称为函数作用域。

在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量),在局部作用域下声明的函数叫局部函数。

1、局部变量只能在该函数内部使用。

2、在函数内部 var 声明的变量是局部变量。

3、函数的形参实际上就是局部变量。

块级作用域

1、在ES6中新增了块级作用域的概念,使用{}扩起来的区域叫做块级作用域

2、所有用let和const声明的变量符合块作用域。

3、块作用域指非函数的{},if语句和for语句里面的{}也属于块作用域。

4、在块内使用let声明的变量,只会在当前的块内有效。

二、作用域链

1、作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。

2、作用域链是在函数定义的时候就已经产生了,但是并不完整,因为当前函数没有调用,所以当前函数的变量对象还没有产生。

3、当函数调用的时候,会创建当前上下文的变量对象,然后添加在已经生成的作用域链的开始位置,构成完整的作用域链。

4、作用域链的开始位置一定是当前的执行环境的变量对象,结束位置一定是window。

5、变量的解析是沿着作用域链搜索的过程,直到寻找到位置,如果一直找不到,则报错。

原文出处:http://www.dongblog.com/notes/105.html
来源:博客网 转载请注明出处!

活跃用户

小马哥
Ta还没有签名
三月风
Ta还没有签名
一缕阳光
Ta还没有签名
Ta还没有签名

友情链接


Warning: Smarty error: unable to read resource: "../../../templates/default/./common/foot/footer_index.htm" in /usr/home/hyu3925200001/htdocs/common/smarty/Smarty.class.php on line 1093

Warning: Smarty error: unable to read resource: "../../../templates/default/./common/foot/footer_index.htm" in /usr/home/hyu3925200001/htdocs/common/smarty/Smarty.class.php on line 1093